<?php
/**
 * Created by PhpStorm.
 * User: xing
 * Date: 2018/11/2
 * Time: 12:55 PM
 */

include Env::get('EXTEND_PATH').'aliyun-php-sdk-core/Config.php';
use Sts\Request\V20150401 as Sts;

/**
 * 获取OSS 临时授权
 * @return mixed
 */
function getOssToken()
{

    // 你需要操作的资源所在的region，STS服务目前只有华东 1 (杭州) 节点可以签发Token，签发出的Token在所有Region都可用
    // 只允许子用户使用角色
    $iClientProfile = \DefaultProfile::getProfile("cn-beijing",
        "LTAI082YRQhqymtL", "kMFWIBEDW0RTT2fdOsSzzyqFuepsue");
    $client = new \DefaultAcsClient($iClientProfile);
    // 角色资源描述符，在RAM的控制台的资源详情页上可以获取
    $roleArn = "acs:ram::1672730155958246:role/aliyunosstokengeneratorrole";
    // 在扮演角色(AssumeRole)时，可以附加一个授权策略，进一步限制角色的权限；
    // 详情请参考《RAM使用指南》
    // 此授权策略表示读取所有OSS的只读权限

    $request = new Sts\AssumeRoleRequest();
    //RoleSessionName即临时身份的会话名称，用于区分不同的临时身份
    //您可以使用您的客户的ID作为会话名称
    $request->setRoleSessionName("client_name");
    $request->setRoleArn($roleArn);
//    $request->setPolicy($policy);
    $request->setDurationSeconds(3600);
    $response = $client->getAcsResponse($request);

    return object2array($response);


}

/**
 * 获取小程序上传oss临时token
 * @return array
 */
function getMiniProgramOssToken()
{
    $OSSAccessKeyId = config('oss.KeyId');
    $policy = base64_encode(json_encode([
        'expiration' => gmt_iso8601(time() +5),
        'conditions' => [
            ["bucket"=>config('oss.Bucket')],
        ],
    ]));

    $Signature = base64_encode(hash_hmac('sha1', $policy, config('oss.KeySecret'), true));

    return [
        'OSSAccessKeyId' => $OSSAccessKeyId,
        'policy' => $policy,
        'Signature' => $Signature,
        'host' => config('oss.Cname'),
    ];
}

function gmt_iso8601($time) {
    $dtStr = date("c", $time);
    $datetime = new DateTime($dtStr);
    $expiration = $datetime->format(DateTime::ISO8601);
    $pos = strpos($expiration, '+');
    $expiration = substr($expiration, 0, $pos);
    return $expiration."Z";
}